﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AplicacionUrHardwarez
{

    public partial class formModificar : Form
    {
        AlmacenEntities productosContext;
        formModificar currentModificar;
        formProductos formularioProductos = new formProductos();

        public formModificar()
        {
            InitializeComponent();
        }

        private void btnModificarCancelar_Click(object sender, EventArgs e)
        {
            //formProductos productos = new formProductos();
            formularioProductos.Visible = true;
            this.Visible = false;
            formularioProductos.Location = this.Location;
        }

        //private void formModificar_Load(object sender, EventArgs e)
        //{
        //    //string fechaActual =
        //    lblModificarFecha.Text = DateTime.Now.ToString("dd/MM/yyyy");
        //}

        private void formModificar_Close(object sender, EventArgs e)
        {
            productosContext.Dispose();
        }

#region Getters y Setters
        // GETTERS y SETTERS para recibir los valores enviados por el formulario productos al hacer click en un registro en el datagrid
        public string recibirId
        {
            get { return lblModificarID.Text; }
            set { lblModificarID.Text = value; }
        }
        public string recibirCodigo
        {
            get { return txtModificarCodigo.Text; }
            set { txtModificarCodigo.Text = value; }
        }

        public string recibirNombre
        {
            get { return txtModificarNombre.Text; }
            set { txtModificarNombre.Text = value; }
        }

        public string recibirDescripcion
        {
            get { return txtModificarDescripcion.Text; }
            set { txtModificarDescripcion.Text = value; }
        }

        public string recibirPrecio
        {
            get { return txtModificarPrecio.Text; }
            set { txtModificarPrecio.Text = value; }
        }

        public string recibirStock
        {
            get { return txtModificarStock.Text; }
            set { txtModificarStock.Text = value; }
        }


#endregion
        private void btnModificarGuardar_Click(object sender, EventArgs e)
        {
            using (AlmacenEntities productosContext =
                new AlmacenEntities())
            {
                DateTime fechaActual = new DateTime();
                fechaActual = DateTime.Now;
                //int SalidaInt = new int();
                //int EntradaInt = new int();

                Guid obtenerGuid = new Guid(lblModificarID.Text);
                float precioFloat = float.Parse(txtModificarPrecio.Text);
                int stockInt = int.Parse(txtModificarStock.Text);
                //if (txtModificarSalida.Text != null || txtModificarEntrada.Text != null)
                //{
                    int SalidaInt = int.Parse(txtModificarSalida.Text);
                    int EntradaInt = int.Parse(txtModificarEntrada.Text);
                //}
                //else 
                //{
                //    SalidaInt = 0;
                //    EntradaInt = 0;
                //}

                // Escogemos de la base de datos el producto que sea igual al ID pasado del formulario Productos
                var modificacion = (from p in productosContext.Productos
                                    where p.ID == obtenerGuid
                                    select p).First();

                var guardarSalida = (from s in productosContext.Salidas
                                     where s.IdProducto == obtenerGuid
                                     select s).First();

                var guardarEntrada = (from en in productosContext.Entradas
                                     where en.IdProducto == obtenerGuid
                                     select en).First();

                // Añadimos los valores a la tabla de Productos, incluyendo los cambios. 
                modificacion.ID = obtenerGuid;
                modificacion.Codigo = txtModificarCodigo.Text;
                modificacion.Nombre = txtModificarNombre.Text;
                modificacion.Descripcion = txtModificarDescripcion.Text;
                modificacion.Precio = precioFloat;
                modificacion.Stock = stockInt;

                guardarSalida.Fecha = fechaActual;
                guardarSalida.StockOut = SalidaInt;
                guardarEntrada.Fecha = fechaActual;             
                guardarEntrada.StockIn = EntradaInt;

                
                //Try catch para asegurar que la aplicacion gestione el error correctamente en el caso de que ocurra un error al guardar
                try
                {

                    productosContext.SaveChanges();
                    MessageBox.Show(" Producto actualizado correctamente");
                    //Cerramos formulario modificar
                    this.Close();
                    formularioProductos.Visible = true;
                    this.Visible = false;
                    formularioProductos.Location = this.Location;
                    
                }
                catch (Exception)
                {
                    //Console.WriteLine(ex.InnerException);
                    MessageBox.Show("No se ha podido actualizar el registro");
                }

            }

        }

        private void formModificar_Load_1(object sender, EventArgs e)
        {
            lblModificarFecha.Text = DateTime.Now.ToString("dd/MM/yyyy");
        }
    }

}

//AlmacenEntities productosContext = new AlmacenEntities();
//Producto producto = new Producto();
//producto.Descripcion = txtModificarDescripcion.Text;



//var productosContext = new AlmacenEntities();
//var producto = new Producto();


// El valor del ID del producto se maneja como texto, por lo que se tiene que 
// pasar a GUID para que corresponda con el tipo de dato en la BBDD. 
// Lo mismo ocurre con el valor para el float de precio e int de Stock







                //var eliminacion = (from p in productosContext.Productos
                //                    where p.ID == obtenerGuid
                //                    select p).First();

                ////Eliminamos el registro
                //productosContext.DeleteObject(eliminacion);




//productosContext.Productos.AddObject(producto);
//productosContext.Productos.Add(pr);
//productosContext.SaveChanges();
//productosContext.Productos.AddObject(modificacion) ;


//            currentPayroll.Salary = Convert.ToInt16(salaryUpDown.Value);
//int rowsAffected = publishContext.SaveChanges();
//MessageBox.Show(rowsAffected.ToString() +
//                " changes made to the table");

//            private void UpdateCategory(category entity)
//{
//    category  catObj = context.category.find(e=> e.id == id);
//    catObj.name = entity.name;
//    catObj.archived = enityt.archived;
//    context.savechanges();
//}


//productosContext = new AlmacenEntities(); //Instanciar productosContext
//// Populamos el combobox con los datos de la BBDD
//cboProductos.DataSource = productosContext.Productos;
//cboProductos.DisplayMember = "Nombre";